﻿using System;
using System.Linq;
using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Helper;
using CTS.Data.Domain.Dao;
using CTS.W._150101.Models.Domain.Common.Constants;
using CTS.W._150101.Models.Domain.Common.Dao;
using CTS.W._150101.Models.Domain.Object.Admin.Items;
using CTS.Web.Com.Domain.Helper;

namespace CTS.W._150101.Models.Domain.Dao.Admin
{
    /// <summary>
    /// MasterItemsEntryDao
    /// </summary>
    public class MasterItemsEntryDao : GenericDao<EntitiesDataContext>
    {
        // Định nghĩa hằng file sql
        public const string MASTERITEMSENTRYDAO_GETINFO_SQL = "MasterItemsEntryDao_GetInfo.sql";

        /// <summary>
        /// Lấy thông tin sản phẩm
        /// </summary>
        public ItemObject GetInfo(string localeCd, string itemCd)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                ItemCd = itemCd
            };
            // Kết quả trả về
            return GetObjectByFile<ItemObject>(MASTERITEMSENTRYDAO_GETINFO_SQL, param);
        }

        /// <summary>
        /// Kiểm tra tồn tại sản phẩm
        /// </summary>
        public bool IsExist(string localeCd, string itemCd)
        {
            var linq = from tbl in EntityManager.MAItems
                       where tbl.LocaleCd == localeCd
                       && tbl.ItemCd == itemCd
                       select tbl;
            var count = linq.Count();
            return count == decimal.One;
        }

        /// <summary>
        /// Kiểm tra tồn tại tên sản phẩm
        /// </summary>
        public bool IsUnique(string itemCd, string itemSearchName)
        {
            var linq = from tbl in EntityManager.MAItems
                       where tbl.ItemCd != itemCd
                       && tbl.ItemSearchName == itemSearchName
                       select tbl;
            var count = linq.Count();
            return count != decimal.One;
        }

        /// <summary>
        /// Thêm sản phẩm
        /// </summary>
        public void Insert(ItemObject data)
        {
            var entity = GetMAItem(data);
            entity.LocaleCd = Logics.LOCALE_DEFAULT;
            entity.ViewCount = decimal.Zero;
            entity.VersionNo = decimal.One;
            entity.CreateUser = WebContextHelper.UserName;
            entity.CreateDate = DateTime.Now;
            entity.UpdateUser = WebContextHelper.UserName;
            entity.UpdateDate = DateTime.Now;
            EntityManager.MAItems.InsertOnSubmit(entity);
        }

        /// <summary>
        /// Cập nhật sản phẩm
        /// </summary>
        public void Update(ItemObject data)
        {
            var linq = from tbl in EntityManager.MAItems
                       where tbl.LocaleCd == data.LocaleCd
                       && tbl.ItemCd == data.ItemCd
                       select tbl;
            var entity = linq.Single();
            // Cập nhật thông tin
            if (!DataCheckHelper.IsNull(data.ItemName)) {
                entity.ItemName = data.ItemName;
            }
            if (!DataCheckHelper.IsNull(data.ItemSearchName)) {
                entity.ItemSearchName = data.ItemSearchName;
            }
            if (!DataCheckHelper.IsNull(data.TypeCd)) {
                entity.TypeCd = data.TypeCd;
            }
            if (!DataCheckHelper.IsNull(data.ExemplarCd)) {
                entity.ExemplarCd = data.ExemplarCd;
            }
            if (!DataCheckHelper.IsNull(data.FileCd)) {
                entity.FileCd = data.FileCd;
            }
            if (!DataCheckHelper.IsNull(data.SortKey)) {
                entity.SortKey = data.SortKey;
            }
            if (!DataCheckHelper.IsNull(data.DeleteFlag)) {
                entity.DeleteFlag = data.DeleteFlag;
            }
            entity.VersionNo = entity.VersionNo + decimal.One;
            entity.UpdateUser = WebContextHelper.UserName;
            entity.UpdateDate = DateTime.Now;
        }

        /// <summary>
        /// Khởi tạo đối tượng sản phẩm
        /// </summary>
        public MAItem GetMAItem(ItemObject data)
        {
            // Khởi tạo biến cục bộ
            var result = DataHelper.CopyObject<MAItem>(data);
            // Gán giá trị trả về
            result.ItemDiv = W150101Logics.CD_ITEM_DIV_NORMAL;
            // Kết quả trả về
            return result;
        }
    }
}
